package models

import (
	"time"
)

// 用户信息表
// 密码采用MD5加密，不可找回密码，只能重置
type User struct {
	Id       int64     //主键
	Name     string    `orm:"size(20)"`  //名字
	Password string    `orm:"size(200)"` //密码（MD5加密）
	Balance  float64   //账户余额
	Age      time.Time //出生日期
	Sex      int8      //性别
	Phone    string    //手机号
	Email    string    //注册邮箱
	Idcard   string    //身份证号码
	Created  time.Time `orm:"auto_now_add;type(datetime)"` //创建时间,自动写入
	Activate bool      `orm:"0"`                           //激活状态，默认false（需要验证邮箱激活）
}

type Email struct {
	Id     int64  //主键
	Email  string //MD5加密邮箱
	Number string //特殊标记（14位长字符）
}

// 密码找回表
type Password struct {
	Id     int64
	Userid int64
	Number string
}

// 用户通知表
type Usermessage struct {
	Id      int64     //主键
	Userid  int64     //对应用户Id
	Title   string    //消息标题
	Content string    `orm:"size(1000)"`                  //消息内容
	Created time.Time `orm:"auto_now_add;type(datetime)"` //创建时间,自动写入
}

// 航班信息表
// status参数信息：
// 0：航班正常
// 1：航班延误
// 2：航班取消
// 3：其他情况
type Aline struct {
	Id            int64     //主键
	Source        string    //出发地
	Destination   string    //目的地
	Price         float64   //机票价格（为了简化数据库模型设计，所有机票价格保持一致）
	Year          int       //年
	Month         int8      //月
	Day           int8      //日
	Begintime     time.Time //出发时间
	Endtime       time.Time //到达时间
	Flightnum     string    //航班编号
	Aircraftmodel string    //飞机型号
	Seatnum       int       //座位数
	Status        int8      //航班状况
	Statusdetail  string    `orm:"null";"size(1000)"` //航班状况详情
}

// 客机座位表
type Seat struct {
	Id        int64 //主键
	Alineid   int64 //对应航班Id
	Seatnum   int8  //对应座位号
	Userid    int64 `orm:"null"` //对应用户Id
	IsOrdered bool  `orm:"0"`    //是否被预定，默认为false
}

// 订票单
type Order struct {
	Id         int64     //主键
	Number     string    //订单编号
	Userid     int64     //对应用户Id
	Alineid    int64     //对应航班Id
	Created    time.Time `orm:"auto_now_add;type(datetime)"` //订票时间，自动写入
	Cancel     bool      `orm:"0"`                           //订单是否被取消（取消订单则标记为true）
	Detail     string    `orm:"null";"size(1000)"`           //退票原因
	Refundtime time.Time `orm:"null"`                        //退票时间
}

// // 退票表
// type Refund struct {
// 	Id      int64     //主键
// 	Orderid int64     //原订票单id
// 	Detail  string    `orm:"size(1000)"`                  //退票原因
// 	Created time.Time `orm:"auto_now_add;type(datetime)"` //退票时间，自动写入
// }

//公告表
type Notice struct {
	Id      int64     //主键
	Title   string    //公告标题
	Content string    `orm:"size(1000)"`                  //内容
	Created time.Time `orm:"auto_now_add;type(datetime)"` //创建时间，自动写入
	Author  string    //作者
}

//帮助表
type Help struct {
	Id      int64     //主键
	Title   string    //标题
	Content string    //内容
	Created time.Time `orm:"auto_now_add;type(datetime)"` //创建时间，自动写入
}
